#include <iostream>
#include <future>
#include <thread>
#include <memory>

int Add(int num1, int num2)
{
    std::cout << "into Add" << std::endl;
    return num1 + num2;
}

int main()
{
    // 1.封装任务 (注意:packaged_task对象不能拷贝 所以用智能指针把其对象管理起来)
    auto task = std::make_shared<std::packaged_task<int(int, int)> >(Add);

    // 2.获取packaged_task所关联的future

    std::future<int> res = task->get_future();

    // 3.在线程中执行
    std::thread t([task]()
                  { (*task)(127, 210); });

    std::this_thread::sleep_for(std::chrono::seconds(2));
    std::cout << "---------------------------" << std::endl;

    // 4.获取结果，等待线程
    std::cout << res.get() << std::endl;

    t.join();

    return 0;
}